import Vue from 'vue'
import router from './router'
import store from './store'
import NProgress from 'nprogress' // progress bar
import 'nprogress/nprogress.css' // progress bar style
import notification from 'ant-design-vue/es/notification'
import { ACCESS_TOKEN, INDEX_MAIN_PAGE_PATH ,USER_AUTH,SYS_BUTTON_AUTH} from '@/store/mutation-types'
import { generateIndexRouter } from "@/utils/util"
import { reportRouterMap } from "@/config/router.config"

NProgress.configure({ showSpinner: false }) // NProgress Configuration

const whiteList = ['/blank', '/user/login', '/user/register', '/user/register-result', '/user/alteration'] // no redirect whitelist
let startTime = new Date().getTime()
router.beforeEach((to, from, next) => {
    NProgress.start() // start progress bar

    console.log("前置守卫："+ to.path )
    if (Vue.ls.get(ACCESS_TOKEN)) {
        /* has token */
        if (to.path === '/user/login') {
            next({ path: INDEX_MAIN_PAGE_PATH })
            NProgress.done()
        } else if(to.path === '/blank' ){
            next()
        } else if( 1 == 0){
            //先不使用后端已加缓存
            //to.path.toLowerCase() != '/dashboard/analysis'
            const redirect = decodeURIComponent(from.query.redirect || to.path)
            if (store.getters.webPermissionList.length === 0 ) {
                     
                store.dispatch('GetWebPermissionList').then(res => {
                    
                    if(redirect == to.path){
                        next()
                    }else{
                        next({ path: redirect })
                    }
                }).catch(() => {
                    
                    if(from.path.indexOf('/blank')>=0){
                      console.log('跳板页重试');
                      next({path:from.fullPath});
                    }else{
                      store.dispatch('Logout').then(() => {
                        next({ path: '/user/login', query: { redirect: to.fullPath } })
                      })
                    }
                })
            }else{
                if(redirect == to.path){
                    next()
                }else{
                    next({ path: redirect })
                }
            }
           
           
        }else {
           
            if (store.getters.permissionList.length === 0) {
                // if(!store.getters.hteSystemMenu || store.getters.hteSystemMenu.length<=0){
                //     store.dispatch('generateSystemMenu',["adminAll"]).then(()=>{
                //         console.info("generateSystemMenu completed")
                //         if(store.getters.hteSystemMenu && store.getters.hteSystemMenu.length>0){
                //             router.addRoutes(store.getters.hteSystemMenu)
                //         }
                //         console.info("generateSystemMenu added")
                //     })
                // }
                //加载hte_system_menu表中配置的路由信息
                store.dispatch('GetPermissionList').then(res => {
                        const menuData = res.result.menu;
                        //console.log(res.message)
                        if (menuData === null || menuData === "" || menuData === undefined) {
                            return;
                        }
                        
                        const redirect = decodeURIComponent(from.query.redirect || to.path)
                        // if(to.path.toLowerCase() != '/dashboard/analysis' || redirect != '/dashboard/analysis'){
                        //     if (to.path === redirect) {
                                
                        //         // hack方法 确保addRoutes已完成 ,set the replace: true so the navigation will not leave a history record
                        //         next()
                        //     } else {
                        //         // 跳转到目的路由
                        //         next({ path: redirect })
                        //     }
                        //     return
                        // }
                        let constRoutes = [];
                        constRoutes = generateIndexRouter(menuData, reportRouterMap);
                        // console.info(constRoutes)
                        // 添加主界面路由
                        store.dispatch('UpdateAppRouter', { constRoutes }).then(() => {
                            // 根据roles权限生成可访问的路由表
                            // 动态添加可访问路由表
                            console.info(store.getters.addRouters)
                            router.addRoutes(store.getters.addRouters)
                            
                            if (to.path === redirect) {
                                
                                // hack方法 确保addRoutes已完成 ,set the replace: true so the navigation will not leave a history record
                                next({...to, replace: true })
                            } else {
                                // 跳转到目的路由
                                next({ path: redirect })
                            }
                        })
                    })
                    .catch(() => {
                        /* notification.error({
                           message: '系统提示',
                           description: '请求用户信息失败，请重试！'
                         })*/
                        if(from.path.indexOf('/blank')>=0){
                          console.log('跳板页重试');
                          next({path:from.fullPath});
                        }else{
                          store.dispatch('Logout').then(() => {
                            next({ path: '/user/login', query: { redirect: to.fullPath } })
                          })
                        }
                    })
            } else {
                next()
            }
           
        }
    } else {
        if (whiteList.indexOf(to.path) !== -1) {
            // 在免登录白名单，直接进入
            next()
        } else {
          if(from.path.indexOf('/blank')>=0){
            console.log('跳板页重试');
            next({path:from.fullPath});
          }else {
            next({ path: '/user/login', query: { redirect: to.fullPath } })
          }
            NProgress.done() // if current page is login will not trigger afterEach hook, so manually handle it
        }
    }
})

router.afterEach((to,from) => {
    NProgress.done() // finish progress bar
    console.log("后置钩子："+ to.path + "时间：" + (new Date().getTime() - startTime )/1000 + "秒" )
})